package day0113;

import day0110.Cat;

public class LiYuan {
    //1.如果本类没有任何构造方法，那么编译器会自动添加一个无参的构造方法
    //  否则自己提供了构造方法，那么编译器就不会添加一个无参的构造方法
    // A.方法名 ==  类名   B.不能有返回值类型
    LiYuan(){//无参构造方法
        //super();//2.构造方法中一定会调用父类的构造方法，如果自己没有调用，系统会默认用super()
        //调用父类的无参构造方法.  //Object类是所有类的父类。
    }
    double money=50000;
    int age=30;
    LiYuan(int age1, double  money1){//有参构造方法
        this.age=age1;//3.用this 调用本类的属性(成员变量)
        this.money=money1;//用this 调用本类的属性(成员变量)
    }
    LiYuan(int age1){//有参构造方法
        this(age1,0.0);//用this()调用本类中另一个有参构造方法
    }
    /*void LiYuan(){//成员方法

    }*/

    void meeting(){//父类成员方法
        System.out.println("开会商量如何和隋朝打仗");
    }

}



//4.子类 继承父类(只能继承一个)
class LiShiMin extends LiYuan{
    LiShiMin(){
        //super();//默认调用父类的无参构造方法
    }//两个构造方法，是重载关系(两个方法名字相同，参数不同)
    LiShiMin(int age1, double  money1){
        super(age1,money1);//调用父类的有参构造方法
    }
    int age=15;//父类中有age，子类重写age成员变量//money会继承父类的money
    void meeting(){//子类重写父类的方法： 父子类两个方法名称相同，参数也相同。
        System.out.println("李世民和魏征开会如何治理国家");
    }
    void war(){//子类独有的方法
        System.out.println("李世民御驾亲征攻打蒙古");
    }
    void war(String enemy1){//两个war方法是重载关系(名字相同，参数不相同<不能通过参数名字区分是否是重载关系>)
        //System.out.println("李世民御驾亲征攻打" + enemy);
    }
    void holdCourt(){//子类独有的方法
        System.out.println("李世民组织群臣早朝");
    }
}//继承， this，  构造，  super， 方法重写。  方法重载(同一个类中，两个方法名字相同，参数不同)。



class  Test{
    public static void main(String[] args) {
        //父类型  引用类型变量名=new LiShiMin();
        LiYuan  hd=new LiShiMin();
        //1.属性绑定到类型上： 使用向上造型的对象，调用父子类都有的成员变量，使用的是父类的成员变变量
        //看对象是什么类型就使用这个类的成员变量
        System.out.println(hd.age);//??  30
        //2.方法绑定到对象上： 使用向上造型的对象，调用子类和父类都有的一个方法。会执行子类的方法
        //看这个对象是哪个类的对象，就调用这个类的成员方法  //父类必须有此方法，否则会报错
        hd.meeting();//"李世民和魏征开会如何治理国家"

        /*hd.war();//使用向上造型的对象调用一个方法，父类必须有此方法，否则会报错
        hd.war("瓦剌");
        hd.holdCourt("瓦剌");*/

        if(hd instanceof LiShiMin){//可以先用instanceof判断   hd是否是(属于)LiShiMin类型，如果属于再进行强制类型转化
            LiShiMin lsm=(LiShiMin)hd;
            lsm.war();
            lsm.war("瓦剌");
            lsm.holdCourt();
        }
    }
}











